﻿/**

  函数类型：
    
       
       1.参数
            有类型
            前面检查：个数、类型 得对

       2.返回值

       3. declare 声明

       4. 对象类型==》复合类型

       5. 可选参数

       6. 接口，类 extend 多继承

       7. 访问修饰符： public private protected 
*/

function show(a: number, b: number) {
    console.log(a + b);
}

show(10, 12);
//show('a', 'b');


//方法里 返回值 检查
function sum(a: number, b: number) {
    //return "abc";

    var c: boolean;
    if (c) {
        return 12;
    } else {
        //return "abc";
    }
    return a + b;
}


//void 函数签名
function onProgress(current: number, total: number): void {

}



//声明外部 变量名/方法名，代表 $ 是外部其他文件中有定义。
declare var $;
declare var Rapheal;

$(function () {
    $('#div1').css('width', '200px');

    //var page = Rapheal(0, 0, 400, 300);
});


//对象类型/复合类型
var point: { x: number, y: number };
var point1: { x: number, y: number, z?: number }; // 变量带问号，表示 z 可有可无

point = { x: 12, y: 200 };
point1 = { x: 13, y: 100 };
point1 = { x: 200, y: 22, z: 300 };

//可选参数
function add(a: number, b: number) {
    return a + b;
}

function add1(a: number, b: number, c?: number) {
    return a + b;
}

add(1, 2);
add1(1, 2, 3);
add1(1, 2);


//参数也是复合类型
function showFuHe(a: { x: number, y: number }) {

}

//接口 约定的是成员
interface Point {
    x: number,
    y: number,
    z?: number
}

var p: Point;

p = { x: 12, y: 4, z: 99 };

//-------------------------------------------------------------
interface A {
    x: number,
    y: number
}

interface B {
    x: number,
    y: number,
    z: number
}

var aa: A | B;

//console.log(aa.x); //编译不报错
//console.log(aa.z);//编译报错，z 不是 公有属性

class Person {
    name: string;
    age: number;

    constructor(name: string, age: number) {
        this.name = name;
        this.age = age;
    }

    showMe() {
        console.log("我的名字是：" + this.name + ",年龄：" + this.age);
    }
}

var per = new Person('blue', 18);
per.showMe();